<template>
  <div>
    <li @mouseenter="isShow = true" @mouseleave="isShow = false" :class={active:isShow}>
        <label>
          <!-- v-model这样写是修改了todos，不推荐 -->
          <!-- <input type="checkbox" v-model="todo.isOver" /> -->
            <input type="checkbox" :checked="todo.isOver" @click="updateOne"/>
            <span>{{todo.content}}</span>
            <!-- <button @click="handler">修改</button> -->
        </label>
        <button class="btn btn-danger" @click="deleteOne" v-show="isShow" >删除</button>
    </li>
  </div>
</template>

<script>
export default {
  name: 'Item',
//   props接收Main传递过来的todo对象
  props:['todo','updateOneTodo','deleteOneTodo'],
  data(){
    return {
      isShow:false,
    }
  },
  methods:{
    // handler(){
        // props传递的数据是只读的。

        // 1.如果传递的是引用类型数据，修改里面属性，是可以的，vue监听的是地址
        // this.todo.content = 'nini'
        // 2.如果是修改地址，就不行
        // this.todo = {}
        // 3.如果修改原始数据类型，也不行
        // (如果传递的是原始数据类型，则渲染不会出错，那是因为 原始类型访问没有的属性是不会报错的，因为有包装对象，结果是undefined
        // vue中处理undefined的渲染是什么都不会出现的，也不会出错)
        // this.todo = 2
    // },
    // 修改单个状态
    updateOne(e){
      // console.log(e);
      // console.log(this.todo);
      this.updateOneTodo(this.todo.id)
    },
    // 删除todo
    deleteOne(){
      this.deleteOneTodo(this.todo.id)
    },
  }
}
</script>

<style scoped>
/*item*/
li {
  list-style: none;
  height: 36px;
  line-height: 36px;
  padding: 0 5px;
  border-bottom: 1px solid #ddd;
}
li.active{
  background-color: rgb(183, 219, 234);
}

li label {
  float: left;
  cursor: pointer;
}

li label li input {
  vertical-align: middle;
  margin-right: 6px;
  position: relative;
  top: -1px;
}

li button {
  float: right;
  /* display: none; */
  margin-top: 3px;
}

li:before {
  content: initial;
}

li:last-child {
  border-bottom: none;
}
</style>
